package cn.hacynn.nd.controller;

import cn.hacynn.nd.common.result.Result;
import cn.hacynn.nd.pojo.dto.TagFileDTO;
import cn.hacynn.nd.pojo.dto.TagRenameDTO;
import cn.hacynn.nd.pojo.entity.File;
import cn.hacynn.nd.pojo.entity.Tag;
import cn.hacynn.nd.service.TagService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @Author Hacynn
 * @Date 2024/5/27 14:43
 * @Version 1.0
 */
@RestController
@RequestMapping("/tag")
@Slf4j
public class TagController {

    @Autowired
    private TagService tagService;

    /**
     * 获取所有tag标签
     * @return
     */
    @GetMapping("/all")
    public Result<List<Tag>> getAllTags() {
        List<Tag> tags = tagService.getAllTags();
        return Result.success(tags);
    }

    /**
     * 新增标签
     * @param name
     * @return
     */
    @PostMapping("/add")
    public Result add(@RequestParam String name) {
        log.info("新增标签:{}", name);
        tagService.add(name);
        return Result.success();
    }

    /**
     * 获取属于该tag的所有文件
     * @param tagName
     * @return
     */
    @GetMapping("/list")
    public Result<List<File>> getListByTag(@RequestParam String tagName) {
        List<File> files = tagService.getListByTag(tagName);
        return Result.success(files);
    }

    /**
     * 将文件添加指定的标签tag
     * @param tagFileDTO
     * @return
     */
    @PostMapping("/add/file")
    public Result addFile(@RequestBody TagFileDTO tagFileDTO) {
        log.info("将文件添加指定的标签tag:{}", tagFileDTO);
        tagService.addFile(tagFileDTO);
        return Result.success();
    }

    /**
     * 将文件从指定的标签tag中移出
     * @param tagFileDTO
     * @return
     */
    @PostMapping("/moveOutTag")
    public Result moveFile(@RequestBody TagFileDTO tagFileDTO) {
        log.info("将文件从指定的标签tag中移出:{}",tagFileDTO);
        tagService.moveFile(tagFileDTO);
        return Result.success();
    }

    /**
     * 删除标签
     * @param tagId
     * @return
     */
    @PostMapping("/delete")
    public Result delete(@RequestParam String tagId) {
        log.info("删除标签，标签id:{}", tagId);
        tagService.delete(tagId);
        return Result.success();
    }

    /**
     * 标签重命名
     * @param tagRenameDTO
     * @return
     */
    @PostMapping("/rename")
    public Result rename(@RequestBody TagRenameDTO tagRenameDTO) {
        log.info("标签重命名:{}",tagRenameDTO);
        tagService.rename(tagRenameDTO);
        return Result.success();
    }
}
